﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Data;
using DAL_entity.entidades;
using DAL_entity.negocio;

public partial class pages_Turnos : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            cargarPacientes();
            cargarEstudio();
            cargarGrilla();
            cargarObraSocial();
            coloresImputs();

        }


    }

    private void coloresImputs()
    {
        if (ddlHora.Text == "")
        {
            ddlHora.BackColor = System.Drawing.Color.LightGray;
        }
        else
        {
            ddlHora.BackColor = System.Drawing.Color.LightGreen;
        }
    }

    private void cargarHoras()
    {

        ddlHora.Items.Clear();
        horario_medico_negocio hmn = new horario_medico_negocio();
        HORARIOS_MEDICOS hm = new HORARIOS_MEDICOS();
        HORARIOS_MEDICOS hm2 = new HORARIOS_MEDICOS();
        hm.dia = Convert.ToDateTime(txtFecha.Text);
        hm.LEGAJO = ddlMedicos.SelectedValue;
        if (hmn.traerTodosPorDia(hm) != null)
        {


            hm2 = hmn.traerTodosPorDia(hm);
            DateTime hora = Convert.ToDateTime(hm2.hora_desde);
            DateTime hora2 = Convert.ToDateTime(hm2.hora_hasta);
            DateTime dt = new DateTime();
            dt = Convert.ToDateTime("08:00");


            for (int i = 1; i <= 26; i++)
            {


                if (dt.TimeOfDay.Hours >= hora.TimeOfDay.Hours && dt.TimeOfDay.Minutes >= hora.TimeOfDay.Minutes && dt.TimeOfDay.Hours <= hora2.TimeOfDay.Hours)
                {
                    if (dt.TimeOfDay.Hours < 10 && dt.TimeOfDay.Minutes < 10)
                    {
                        ddlHora.Items.Add("0" + dt.TimeOfDay.Hours + ":" + "0" + dt.TimeOfDay.Minutes);
                    }
                    else if (dt.TimeOfDay.Hours < 10)
                    {
                        ddlHora.Items.Add("0" + dt.TimeOfDay.Hours + ":" + dt.TimeOfDay.Minutes);
                    }
                    else if (dt.TimeOfDay.Minutes < 10)
                    {
                        ddlHora.Items.Add(dt.TimeOfDay.Hours + ":" + "0" + dt.TimeOfDay.Minutes);
                    }
                    else
                    {
                        ddlHora.Items.Add(dt.TimeOfDay.Hours + ":" + dt.TimeOfDay.Minutes);
                    }

                }
                dt = dt.AddMinutes(30);

            }
        }
        coloresImputs();
    }

    private void cargarGrilla()
    {
        turnos_negocio turNeg = new turnos_negocio();
        gvTurnos.DataSource = turNeg.traerTodosVista();
        gvTurnos.DataBind();


    }

    private void cargarMedicos(DateTime fecha)
    {

        CONSULTNET ctx = new CONSULTNET();
        int p = Convert.ToInt32(ddlEstudio.SelectedValue.ToString());
        var q = from e in ctx.EMPLEADOS
                join m in ctx.MEDICOS on e.ID_EMPLEADO equals m.ID_EMPLEADO
                join em in ctx.ESTUDIOS_X_MEDICOS on m.LEGAJO equals em.LEGAJO_MEDICO
                join hm in ctx.HORARIOS_MEDICOS on m.LEGAJO equals hm.LEGAJO
                where (em.ID_ESTUDIO == p & hm.dia == fecha)
                select new { em.LEGAJO_MEDICO, e.APELLIDO };


        ddlMedicos.DataSource = q.ToList();
        ddlMedicos.DataValueField = "LEGAJO_MEDICO";
        ddlMedicos.DataTextField = "APELLIDO";
        ddlMedicos.DataBind();

    }

    private void cargarObraSocial()
    {
        obra_social_negocio obraNeg = new obra_social_negocio();

        ddlObra.DataSource = obraNeg.traerTodos();
        ddlObra.DataValueField = "ID_OBRA_SOCIAL";
        ddlObra.DataTextField = "OBRA_SOCIAL";
        ddlObra.DataBind();

    }

    private void cargarEstudio()
    {
        estudios_negocio estNeg = new estudios_negocio();
        ddlEstudio.DataSource = estNeg.traerTodos();
        ddlEstudio.DataValueField = "ID_ESTUDIO";
        ddlEstudio.DataTextField = "ESTUDIO";
        ddlEstudio.DataBind();

    }

    private void cargarPacientes()
    {
        paciente_negocio pacNeg = new paciente_negocio();
        ddlDocPaciente.DataSource = pacNeg.traerTodos();
        ddlDocPaciente.DataValueField = "DOCUMENTO";
        ddlDocPaciente.DataTextField = "DOCUMENTO";
        ddlDocPaciente.DataBind();
        ddlDocPaciente.SelectedIndex = -1;
    }

    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
        if (e.Day.Date < DateTime.Now)
        {
            e.Cell.BackColor = System.Drawing.Color.LightGray;
            e.Cell.CssClass = "diasPasados";
            e.Cell.ForeColor = System.Drawing.Color.DarkGray;

        }
        if (e.Day.Date.Day == DateTime.Now.Day & e.Day.Date.Month == DateTime.Now.Month & e.Day.Date.Year == DateTime.Now.Year)
        {
            e.Cell.BackColor = System.Drawing.Color.LightCyan;

        }

    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
       
        
        if (txtFecha.Text != "" & ddlMedicos.SelectedIndex >= 0 & ddlObra.SelectedIndex >= 1)
        {
            
            turnos_negocio turNeg = new turnos_negocio();
            TURNOS tur = new TURNOS();
            DateTime now = Convert.ToDateTime(txtFecha.Text);
            string[] cad = ddlHora.Text.Split(new char[] { ':' });
            DateTime dt = new DateTime(now.Year, now.Month, now.Day, Convert.ToInt32(cad[0].ToString()), Convert.ToInt32(cad[1].ToString()), 0);
            tur.FECHA_TURNO = dt;
            tur.LEGAJO_MEDICO = ddlMedicos.SelectedValue;
            tur.DOCUMENTO_PACIENTE = ddlDocPaciente.SelectedValue;
            tur.ID_EMPLEADO = 3; // aca va el empleado que crea el turno
            tur.ID_OBRA_SOCIAL = Convert.ToInt32(ddlObra.SelectedValue);
            if (rbAbonado.Checked == true)
            {
                tur.ESTADO = 1;
            }
            else
            {
                tur.ESTADO = 0;
            }
            tur.ID_HORARIO = 1; // falta funcion de deteccion de horario turno
            tur.ID_ESPECIALIDAD = 2;
            tur.ID_ESTUDIO = Convert.ToInt32(ddlEstudio.SelectedValue);

            if (comprobarDisponibilidadMedico(tur) == true)
            {
                turNeg.insertar(tur);



            }

            txtMsj.ForeColor = System.Drawing.Color.Green;
         txtMsj.Text = "El turno fue guardado";

        }
        else
        {
            txtMsj.ForeColor = System.Drawing.Color.Red;
            txtMsj.Text = "El turno no fue guardado";
        }

        cargarGrilla();

    }

    // comprueba que la cantidad de turnos que atiende un medico cada media hora no se sobrepase ====================================================================

    private Boolean comprobarDisponibilidadMedico(TURNOS obj)
    {
        CONSULTNET ctx = new CONSULTNET();
        var query = from p in ctx.TURNOS where p.FECHA_TURNO == obj.FECHA_TURNO & p.LEGAJO_MEDICO == obj.LEGAJO_MEDICO select p;
        int total = query.Count();
        var query2 = from p in ctx.ESTUDIOS_X_MEDICOS where p.LEGAJO_MEDICO == obj.LEGAJO_MEDICO & p.ID_ESTUDIO == obj.ID_ESTUDIO select p.TURNOS_MEDIA_HORA;
        int maximo = query2.SingleOrDefault();

        if (maximo >= total)
        {
            return true;
        }
        else
        {
            return false;
        }

    }

    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
        txtFecha.Text = Calendar1.SelectedDate.ToShortDateString();
        DateTime fecha = Convert.ToDateTime(txtFecha.Text);
        ddlEstudio.SelectedIndex = 0;
        cargarMedicos(fecha);
        cargarHoras();
    }

    protected void ddlEstudio_Load(object sender, EventArgs e)
    {
        //cargarMedicos();
        //cargarHoras();
    }

    protected void ddlMedicos_SelectedIndexChanged(object sender, EventArgs e)
    {
        cargarHoras();
    }

    protected void ddlEstudio_SelectedIndexChanged(object sender, EventArgs e)
    {
        DateTime fecha = Convert.ToDateTime(txtFecha.Text);
        cargarMedicos(fecha);
        cargarHoras();
    }

    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        //DateTime desde = Convert.ToDateTime(txtDesde.Text);
        //DateTime hasta = Convert.ToDateTime(txtHasta.Text);
        string tipo = ddlTipoBusqueda.SelectedItem.ToString();
        string textoBusqueda = txtTexto.Text;
        //busquedaTurnos(desde, hasta, tipo, textoBusqueda);
        busquedaTurnos( tipo,textoBusqueda);
    }

  //  private void busquedaTurnos(DateTime desde, DateTime hasta, string tipo, string textoBusqueda)
         private void busquedaTurnos(string tipo, string textoBusqueda)
    {
        CONSULTNET ctx = new CONSULTNET();

        if (tipo == "Apellido Medico")
        {
            

            turnos_negocio turNeg = new turnos_negocio();
            gvTurnos.DataSource = turNeg.busquedaVista(textoBusqueda);
            gvTurnos.DataBind();

        }
       






    }

    protected void gvTurnos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvTurnos.PageIndex = e.NewPageIndex;
        cargarGrilla();
    }

    protected void gvTurnos_SelectedIndexChanged(object sender, EventArgs e)
    {
        lblMedicoDetalle.Text = gvTurnos.SelectedRow.Cells[4].Text;
        lblnombreDetalle.Text = gvTurnos.SelectedRow.Cells[2].Text;
        lblEstudioDetalle.Text = gvTurnos.SelectedRow.Cells[5].Text;
    }


}